'use strict'

const { Controller } = require('egg')

class HomeController extends Controller {
  // 获取服务器列表
  async index() {
    const { ctx, service } = this
    await ctx.isLogin()
    ctx.body = await service.server.list()
  }

  // 创建服务器
  async create() {
    const { ctx, service } = this
    await ctx.isLogin()
    ctx.body = await service.server.create()
  }

  // 查看一个
  async show() {
    const { ctx, service } = this
    await ctx.isLogin()
    const { _id } = ctx.user
    const server = await ctx.model.Server.findOne({ _id: ctx.params.id, user: _id })
    if (!server) {
      ctx.throw(404, 'not found', '服务器不存在')
    }
    // 当期那用户
    ctx.body = server
  }

  // 更新服务器
  async update() {
    const { ctx, service } = this
    await ctx.validateId()
    const server = await service.server.update()
    if (!server) {
      ctx.throw(404, 'not found', '服务器不存在')
    }
    ctx.body = server
  }

  // 删除服务器
  async destroy() {
    const { ctx, service } = this
    await ctx.isLogin()
    await ctx.validateId()
    const server = await ctx.model.Server.findById(ctx.params.id)
    if (!server) {
      ctx.throw(404, 'not found', '对象不存在')
    }
    if (server.user.toString() !== ctx.user._id.toString() && !ctx.user.isAdmin) {
      ctx.throw(403, 'not permission', '无权删除')
    }
    ctx.body = await server.remove()
  }

  async status() {
    const { ctx, service } = this
    ctx.body = await service.index.status()
  }
}

module
  .exports = HomeController
